const secret = require('./secret')

exports.isArray = (data) => Object.prototype.toString.call(data) === '[object Array]';
/**
* 返回请求ip地址
* @returns string
*/
exports.getIp = (req) => {
    var ip = req.headers['x-real-ip'] || req.headers['x-forwarded-for'] || req.connection.remoteAddres || req.socket.remoteAddress || '';
    if(ip.split(',').length>0){
      ip = ip.split(',')[0];
    }
    return ip;
}

/**
 * 随机生成数字
 *
 * 示例：生成长度为 12 的随机数：randomNumber(12)
 * 示例：生成 3~23 之间的随机数：randomNumber(3, 23)
 *
 * @param1 最小值 | 长度
 * @param2 最大值
 * @return int 生成后的数字
 */
exports.randomNumber = (min, max) => 
{
    // 生成 最小值 到 最大值 区间的随机数
    const random = (min1, max1) => 
    {
        return Math.floor(Math.random() * (max1 - min1 + 1) + min1);
    };
    if (!max) 
    {
        // 生成指定长度的随机数字，首位一定不是 0
        let nums = [...Array(min).keys()].map((i) => (i > 0 ? random(0, 9) : random(1, 9)));
        return parseInt(nums.join(''));
    }
    return random(min, max);
}

/**
 * 随机生成字符串
 * @param length 字符串的长度
 * @param chats 可选字符串区间（只会生成传入的字符串中的字符）
 * @return string 生成的字符串
 */
exports.randomString = (length, chats) =>
{
    if (!length) length = 1;
    if (!chats) chats = '382428428qwertyuioplkjhgfdsazxcvbnm';
    let str = '';
    for (let i = 0; i < length; i++) 
    {
        let num = this.randomNumber(0, chats.length - 1);
        str += chats[num];
    }
    return str;
}

/**
* 随机生成ID
* @returns string
*/
exports.randomID = (length) =>
{
   let date = new Date().getTime();
   return this.randomString(length, secret.Encrypt(date));
}

/**
* 随机生成用户账号
* @param length 长度
* @param firstNum 首位数字
* @returns number
*/
exports.randomUsername = (length, firstNum) =>
{
   const random = (min1, max1) => 
   {
       return Math.floor(Math.random() * (max1 - min1 + 1) + min1);
   };
   
   let nums = [...Array(length).keys()].map((i) => (i > 0 ? random(0, 9) : firstNum));
   return parseInt(nums.join(''));
}